﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OwnZTec.LojaDelivery.Data;

namespace OwnZTec.LojaDelivery.UI.WinForms
{
    public partial class FrmProduto : OwnZForm
    {
        #region -- Membros e Construtores -------------------------------------------------------------------------------------------------
        public FrmProdutos Pai
        {
            get;
            set;
        }

        public bool Edicao
        {
            get;
            set;
        }

        private bool _alterado;
        private bool _valorAlterado;

        public tbProduto Produto
        {
            get;
            set;
        }

        public FrmProduto()
        {
            InitializeComponent();
            this.ConfigurarFormFilho();
        }

        private void FrmProduto_Load(object sender, EventArgs e)
        {
            Carregar();
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------

        #region -- Eventos ----------------------------------------------------------------------------------------------------------------
        private void txtNome_TextChanged(object sender, EventArgs e)
        {
            _alterado = true;
        }

        private void txtNome_Validating(object sender, CancelEventArgs e)
        {
            if (txtNome.Text.EhNuloOuVazio())
            {
                erpErro.SetError(txtNome, "Informar o nome do produto");
                e.Cancel = true;
                return;
            }

            erpErro.SetError(txtNome, "");
        }

        private void cmbGrupoProduto_SelectedIndexChanged(object sender, EventArgs e)
        {
            _alterado = true;

            if (chkUtilizarValorGrupo.Checked)
                txtvalor.Text = ((tbGrupoProduto)cmbGrupoProduto.SelectedItem).valPrecoPadrao.ToString();
        }

        private void txtvalor_ValueChanged(object sender, EventArgs e)
        {
            if (chkUtilizarValorGrupo.Checked)
                return;

            _alterado = true;
            _valorAlterado = true;
        }

        private void txtvalor_Validating(object sender, CancelEventArgs e)
        {
            ValidarValor();
        }

        private void chkAtivo_CheckedChanged(object sender, EventArgs e)
        {
            _alterado = true;
        }

        private void cmdSalvar_Click(object sender, EventArgs e)
        {
            if (ValidarValor())
                return;

            Salvar();
            Close();
        }

        private void cmdSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void FrmProduto_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!_alterado)
                return;

            var res = Contexto.MainForm.ExibirMensagemSairSemSalvar();

            if (res != DialogResult.Yes)
            {
                e.Cancel = true;
                return;
            }

            Dispose();
        }

        private void chkUtilizarValorGrupo_CheckedChanged(object sender, EventArgs e)
        {
            txtvalor.Enabled = !chkUtilizarValorGrupo.Checked;

            if (chkUtilizarValorGrupo.Checked)
                txtvalor.Text = ((tbGrupoProduto)cmbGrupoProduto.SelectedItem).valPrecoPadrao.ToString();
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------

        #region -- Metodos ----------------------------------------------------------------------------------------------------------------
        private void Salvar()
        {
            Produto.desNomeProduto = txtNome.Text;
            Produto.valPrecoProduto = chkUtilizarValorGrupo.Checked ? 0 : decimal.Parse(txtvalor.Value.ToString());
            Produto.flgAtivo = chkAtivo.Checked;
            Produto.idGrupo = cmbGrupoProduto.SelectedValue.ParaInt();

            if (!Edicao)
                Contexto.Db.tbProdutoes.AddObject(Produto);

            Contexto.Db.SaveChanges();

            Edicao = true;

            _alterado = false;

            Pai.AtualizarGrid();
        }

        private void Carregar()
        {
            cmbGrupoProduto.DataSource = Contexto.Db.tbGrupoProdutoes;
            cmbGrupoProduto.ValueMember = "idGrupo";
            cmbGrupoProduto.DisplayMember = "desNomeGrupo";

            if (Edicao)
            {
                txtNome.Text = Produto.desNomeProduto;
                cmbGrupoProduto.SelectedValue = Produto.idGrupo;
                chkAtivo.Checked = Produto.flgAtivo;

                if (Produto.valPrecoProduto != 0)
                {
                    txtvalor.Text = Produto.valPrecoProduto.ToString();
                    chkUtilizarValorGrupo.Checked = false;
                    _valorAlterado = true;
                }
                else
                {
                    txtvalor.Enabled = false;
                    txtvalor.Text = Produto.tbGrupoProduto.valPrecoPadrao.ToString();
                    chkUtilizarValorGrupo.Checked = true;
                    _valorAlterado = false;
                }
            }
            else
            {
                Produto = new tbProduto();
                _valorAlterado = false;
                chkAtivo.Checked = true;
            }

            _alterado = false;
        }

        private bool ValidarValor()
        {
            if (decimal.Parse(txtvalor.Value.ToString()) == 0)
            {
                erpErro.SetError(txtvalor, "Você deve especificar um valor para o produto.");
                return true;
            }

            erpErro.SetError(txtvalor, "");
            return false;
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------
    }
}
